/**
 * Message组件的类型定义
 */

import { TuiIconWithNameProps } from "../icon/types";

/**
 * 消息类型枚举
 */
export type TuiMessageType = 'success' | 'warning' | 'info' | 'error';

/**
 * 消息位置枚举
 */
export type TuiMessagePlacement = 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';

/**
 * Message组件的属性接口
 */
export interface TuiMessageProps {
  /**
   * 消息文字
   */
  message?: string;

  /**
   * 消息类型
   * @default 'info'
   */
  type?: TuiMessageType;

  /**
   * 是否纯色
   * @default false
   */
  plain?: boolean;

  /**
   * 自定义图标
   */
  icon?: string | TuiIconWithNameProps;

  /**
   * 是否将message属性作为HTML片段处理
   * @default false
   */
  dangerouslyUseHTMLString?: boolean;

  /**
   * 自定义类名
   */
  customClass?: string;

  /**
   * 显示时间，单位为毫秒。设为0则不会自动关闭
   * @default 3000
   */
  duration?: number;

  /**
   * 是否显示关闭按钮
   * @default false
   */
  showClose?: boolean;

  /**
   * 关闭时的回调函数
   */
  onClose?: () => void;

  /**
   * 设置到视口边缘的距离
   * @default 16
   */
  offset?: number;

  /**
   * 消息放置位置
   * @default 'top'
   */
  placement?: TuiMessagePlacement;

  /**
   * 合并内容相同的消息
   * @default false
   */
  grouping?: boolean;

  /**
   * 重复次数
   * @default 1
   */
  repeatNum?: number;

  /**
   * 消息插入位置
   * 'top': 推到列表头部
   * 'bottom': 推到列表尾部
   * @default 'top'
   */
  pushTo?: 'top' | 'bottom';
}

/**
 * Message实例接口
 */
export interface TuiMessageInstance {
  /**
   * 关闭当前消息
   */
  close: () => void;

  /**
   * 消息ID
   */
  id: string;

  /**
   * 消息文字
   */
  message?: string;

  /**
   * 消息类型
   */
  type?: TuiMessageType;

  /**
   * 消息位置
   */
  placement?: TuiMessagePlacement;

  /**
   * 偏移量
   */
  offset?: number;

  /**
   * 垂直偏移量（保留以兼容旧代码）
   */
  verticalOffset?: number;

  /**
   * 重复次数
   */
  repeatNum?: number;

  /**
   * 消息插入位置
   */
  pushTo?: 'top' | 'bottom';

  /**
   * 组件实例的根DOM元素
   */
  $el?: HTMLElement;

  /**
   * 虚拟节点引用
   */
  vnode?: any;
}

/**
 * Message方法接口
 */
export interface TuiMessage {
  /**
   * 打开消息提示
   * @param options 消息配置或消息内容
   */
  (options: TuiMessageProps | string): TuiMessageInstance;

  /**
   * 打开成功消息
   * @param options 消息配置或消息内容
   */
  success(options: TuiMessageProps | string): TuiMessageInstance;

  /**
   * 打开警告消息
   * @param options 消息配置或消息内容
   */
  warning(options: TuiMessageProps | string): TuiMessageInstance;

  /**
   * 打开信息消息
   * @param options 消息配置或消息内容
   */
  info(options: TuiMessageProps | string): TuiMessageInstance;

  /**
   * 打开错误消息
   * @param options 消息配置或消息内容
   */
  error(options: TuiMessageProps | string): TuiMessageInstance;

  /**
   * 关闭所有消息
   */
  closeAll(): void;
}